module turn(
    input clk,                      // 时钟信号
    input turn_up,                  // 上方向键信号
    input turn_down,                // 下方向键信号
    input turn_left,                // 左方向键信号
    input turn_right,               // 右方向键信号
    input game_pause,               // 游戏暂停信号
    input [1:0] game_status,        // 游戏状态信号
    output [1:0] current_direction  // 当前方向输出
);

// ************ 参数定义 ***********

// 游戏状态
parameter LAUNCHING = 2'b00;       // 启动状态
parameter PLAYING = 2'b01;         // 游戏进行状态
parameter DIE_FLASHING = 2'b10;    // 死亡闪烁状态
parameter INITIALIZING = 2'b11;    // 初始化状态

// 控制按钮
parameter UP = 2'b00;              // 上方向
parameter RIGHT = 2'b01;           // 右方向
parameter DOWN = 2'b10;            // 下方向
parameter LEFT = 2'b11;            // 左方向

reg [1:0] direction;               // 当前方向寄存器

assign current_direction = direction;  // 将当前方向寄存器赋值给输出

// 主逻辑
always @(posedge clk) begin
    if (game_status == INITIALIZING || game_status == LAUNCHING) begin
        // 如果游戏处于初始化或启动状态，将方向设置为右方向
        direction <= RIGHT;
    end else if (~game_pause) begin
        // 如果游戏未暂停
        case (direction)
            UP: begin
                // 当前方向为上
                if (turn_left == 1) direction <= LEFT;  // 如果左键按下，转向左
                else if (turn_right == 1) direction <= RIGHT;  // 如果右键按下，转向右
            end
            RIGHT: begin
                // 当前方向为右
                if (turn_up == 1) direction <= UP;  // 如果上键按下，转向上
                else if (turn_down == 1) direction <= DOWN;  // 如果下键按下，转向下
            end
            DOWN: begin
                // 当前方向为下
                if (turn_left == 1) direction <= LEFT;  // 如果左键按下，转向左
                else if (turn_right == 1) direction <= RIGHT;  // 如果右键按下，转向右
            end
            LEFT: begin
                // 当前方向为左
                if (turn_up == 1) direction <= UP;  // 如果上键按下，转向上
                else if (turn_down == 1) direction <= DOWN;  // 如果下键按下，转向下
            end
            default: direction <= direction;  // 默认情况下保持当前方向不变
        endcase
    end
end

endmodule